package com.rw.tool.util.expression.expression;

import com.rw.tool.util.CollectionUtil;
import com.rw.tool.util.expression.element.ExpressionElement;
import com.rw.tool.util.expression.exception.PostfixPrefixExpressionException;
import com.rw.tool.util.expression.expression.tree.ElementNode;

import java.util.List;

/**
 * 前缀表达式
 */
public class PrefixExpression extends Expression {
    public PrefixExpression(List<ExpressionElement> elements) {
        super(elements);
        assertExpression(CollectionUtil.reverse(elements));
    }

    @Override
    public ElementNode getRootNode() {
        return getRootNode(getElements(), true);
    }

    /**
     * 验证表达式是否合法
     */
    public static boolean checkExpression(List<ExpressionElement> elements) {
        try {
            assertExpression(CollectionUtil.reverse(elements));
        } catch (PostfixPrefixExpressionException exception) {
            return false;
        }
        return true;
    }
}
